/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package servidorRMI;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import model.Jogador;
import model.ListaJogadores;
import state.implementacoes.Falido;
import strategy.modelos.Campo;

/**
 *
 * @author Lucas
 */
public class VerificaFalencia {

    private Jogador jogador;

    public Jogador getJogador() {
        return jogador;
    }

    public void setJogador(Jogador jogador) {
        this.jogador = jogador;
    }

    public boolean venderCompanias() {
        for (Campo campo : jogador.getListaCampos()) {
            if (campo.getCor().equals("")) {
                jogador.setMoney(jogador.getMoney() + (campo.getValor() / 2));
                jogador.getListaCampos().remove(campo);
                AddObservadorImp.getInstancia().notificar();
                return true;
            }
        }
        return false;
    }

    public boolean venderTerrenos() {
        List<Campo> camposComCasas = new ArrayList<Campo>();
        List<Campo> camposVendiveis = jogador.getListaCampos();

        /*
         * Procurador de casas...
         */
        for (Campo campo : camposVendiveis) { //CamposVendiviveis possui todos os terrenos que podemn ser vendidos
            if (campo.getCasas() != 0) {
                for (Campo campoCorCasas : camposVendiveis) {
                    if (campoCorCasas.getCor().equals(campo.getCor())) {
                        camposComCasas.add(campoCorCasas);
                    }
                }
            }
        }

        /*
         * Exclui os bairros que possuem casas... os que estao na lista acima...
         */
        for (Campo campoExcluir : camposComCasas) {
            camposVendiveis.remove(campoExcluir);
        }
        
        /*
         * Remove os repetidos da arrayList CamposComCasas....
         * (INTERESSANTE)
         */
        camposComCasas = new ArrayList<Campo>(new HashSet<Campo>(camposComCasas));

        /*
         * Faz a venda dos terrenos....
         * Primeiramente dos campos que não possuem casas...
         * Quando um campo possui casas é ventido todos os lotes que se encontram
         * no bairro da devida casa...
         */
        if (!(camposVendiveis.isEmpty())) {
            jogador.setMoney(jogador.getMoney() + (camposVendiveis.get(0).getValor() / 2));
            jogador.getListaCampos().remove(camposVendiveis.get(0));
            AddObservadorImp.getInstancia().notificarMensagem(jogador.getName(),
                    "BANCO: Tomou " + camposVendiveis.get(0).getDescricao()
                    + " para pagar uma divida!");
            camposVendiveis.remove(0);
            return true;
        } else if (!(camposComCasas.isEmpty())) {
            String cor = camposComCasas.get(0).getCor();
            for (Campo campo : camposComCasas) {
                if (campo.getCor().equals(cor)) {
                    campo.setCasas(0);
                    jogador.setMoney(jogador.getMoney() + (campo.getValor() / 2));
                    jogador.getListaCampos().remove(campo);
                    AddObservadorImp.getInstancia().notificarMensagem(jogador.getName(),
                            "BANCO: Tomou " + campo.getDescricao()
                            + " para pagar uma divida!");
                }
            }
            return true;
        } else {
            return false;
        }
    }
    
    public void campeao(){
        int quantidadeJogadores = ListaJogadores.getInstancia().getListaJogadores().size();
        int contador = 0;
        for (Jogador jogador : ListaJogadores.getInstancia().getListaJogadores()) {
            if(jogador.getState() instanceof Falido){
                contador = contador + 1;
            }
        }
        
        if((quantidadeJogadores-1) == contador){
            for (Jogador j : ListaJogadores.getInstancia().getListaJogadores()) {
                if(!(j.getState() instanceof Falido)){
                    AddObservadorImp.getInstancia().notificarMensagem(j.getName(), 
                            "VOCÊ GANHOU!");
                }
            }
        }
    }
}
